package com.sfd.gateway.loader;
//
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.cloud.gateway.event.RefreshRoutesEvent;
//import org.springframework.cloud.gateway.route.InMemoryRouteDefinitionRepository;
//import org.springframework.cloud.gateway.route.RouteDefinition;
//import org.springframework.cloud.gateway.route.RouteDefinitionWriter;
//import org.springframework.cloud.gateway.support.NotFoundException;
//import org.springframework.context.ApplicationEventPublisher;
//import org.springframework.context.ApplicationEventPublisherAware;
//import org.springframework.http.ResponseEntity;
//import org.springframework.stereotype.Service;
//import reactor.core.publisher.Mono;
//
///**
// * 动态更新路由网关service
// * 1）实现一个Spring提供的事件推送接口ApplicationEventPublisherAware
// * 2）提供动态路由的基础方法，可通过获取bean操作该类的方法。该类提供新增路由、更新路由、删除路由，然后实现发布的功能。
// *
// * @author zyf
// */
//@Slf4j
//@Service
public class DynamicRouteService{

}
//implements ApplicationEventPublisherAware {
//
//    @Autowired
//    private RouteDefinitionWriter routeDefinitionWriter;
//
//    @Autowired
//    private InMemoryRouteDefinitionRepository repository;
//
//    /**
//     * 发布事件
//     */
//
//    private ApplicationEventPublisher publisher;
//
//    @Override
//    public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
//        this.publisher = applicationEventPublisher;
//    }
//
//    /**
//     * 删除路由
//     *
//     * @param id
//     * @return
//     */
//    public synchronized Mono<ResponseEntity<Object>> delete(String id) {
//        return this.repository.delete(Mono.just(id)).then(Mono.defer(() -> {
//            return Mono.just(ResponseEntity.ok().build());
//        })).onErrorResume((t) -> {
//            return t instanceof NotFoundException;
//        }, (t) -> {
//            return Mono.just(ResponseEntity.notFound().build());
//        });
//    }
//
//    /**
//     * 更新路由
//     *
//     * @param definition
//     * @return
//     */
//    public synchronized String update(RouteDefinition definition) {
//        try {
//            log.info("gateway update route {}", definition);
//            delete(definition.getId());
//        } catch (Exception e) {
//            return "update fail,not find route  routeId: " + definition.getId();
//        }
//        try {
//            repository.save(Mono.just(definition)).subscribe();
//            this.publisher.publishEvent(new RefreshRoutesEvent(this));
//            return "success";
//        } catch (Exception e) {
//            return "update route fail";
//        }
//    }
//
//    /**
//     * 增加路由
//     *
//     * @param definition
//     * @return
//     */
//    public synchronized String add(RouteDefinition definition) {
//        log.info("gateway add route {}", definition);
//        try {
//            repository.save(Mono.just(definition)).subscribe();
//        } catch (Exception e) {
//
//        }
//        return "success";
//    }
//}